package com.kk.my_pro.config;


import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

import static org.springframework.security.config.Customizer.withDefaults;

@Configuration
//@EnableWebSecurity
//public class WebSecurityConfig extends UsernamePasswordAuthenticationFilter {
public class WebSecurityConfig {


//    /**
//     * 基于内存的用户信息
//     * @return
//     */
//    @Bean
//    public UserDetailsService userDetailsService(){
//        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); // 创建基于内存的用户信息管理器
//        manager.createUser(User.withDefaultPasswordEncoder().
//                username("user").password("password").
//                roles("USER").build());
//        return manager;
//    }


//    /**
//     * springSecurity默认的过滤器链（可不写）
//     *
//     * @param http
//     * @return
//     * @throws Exception
//     */
//    @Bean
//    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//        // 开启授权保护
//        http.authorizeHttpRequests(
//                        authorize -> authorize
////                                .requestMatchers("/user/list").hasAuthority("USER_LIST") // 接口user/list，只能由USER_LIST角色操作
////                                .requestMatchers("/user/add").hasAuthority("USER_ADD") // 接口user/add，只能由USER_ADD角色操作
//                                .requestMatchers("/user/**").hasRole("ADMIN") // 该角色可以访问/user下所有接口
//                                .anyRequest() // 对所有请求开启授权保护
//                                .authenticated() // 已认证的请求会被自动授权
//                )
//                .formLogin(form -> {
//                    form.successHandler(new MyAuthenticationSuccessHandler()) //认证成功时的处理
//                            .failureHandler(new MyAuthenticationFailureHandler())//认证失败时的处理
//                    ;
//                }); // 使用表单授权方式
//        http.logout(logout -> {
//            logout.logoutSuccessHandler(new MyLogoutSuccessHandler());//退出登录，注销成功时的处理
//        });
////        http.exceptionHandling(logout -> {
////            logout.authenticationEntryPoint(new MyAuthenticationEntryPoint());//请求未认证的处理
////        });
//        http.csrf(withDefaults()); // 允许跨越
//        //.httpBasic(withDefaults()); // 使用基本授权方式
//        http.csrf(csrf -> csrf.disable()); // 关闭csrf防御
//        return http.build();
//    }


    /**
     * 基于数据库的用户信息
     *
     * @return
     */
//    @Bean
    @ConditionalOnMissingBean //没有则注入
    public UserDetailsService userDetailsService() {
        DBUserDetailsManager manager = new DBUserDetailsManager();
        return manager;
    }

}
